package br.com.sistemasaude.dao;

import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

import br.com.sistemasaude.bean.Medico;
import br.com.sistemasaude.bean.Usuario;
import br.com.sistemasaude.util.JpaUtil;

public class MedicoDaoImp implements MedicoDAO{
	
	private final GenericDAO<Medico> dao;
	EntityManager em = new JpaUtil().getEntityManager();
	
	public MedicoDaoImp(){
		dao = new GenericDAO<Medico>(em, Medico.class);		
	}
	
	
	
	public void salvar(Medico medico) {

		try {

			em.getTransaction().begin();
			dao.salvar(medico);
			em.getTransaction().commit();

		} catch (Exception e) {
			
			em.getTransaction().rollback();
			e.printStackTrace();
			
		} finally {
			em.close();
		}
		
	}
	
	
	
	
	@SuppressWarnings("unchecked")
	public List<Medico> localizarAll(Date dt_agendamento) {

		EntityTransaction t = em.getTransaction();
		List<Medico> list = null;

		try {

			t.begin();
			
			Query q =  em.createQuery("select m from Medico m");
//			q.setParameter("pCategoria", categoria);
//			q.setParameter("pDataIni", dataIni);
//			q.setParameter("pDataFim", dataFim);
			list = q.getResultList();
			

			t.commit();

		} catch (Exception e) {

			e.printStackTrace();
			if (t.isActive())
				t.rollback();

		} finally {

			em.close();
		}

		return list;

	}


	public Medico localizarMedicoPeloUsuario(Usuario usuario) {

		EntityTransaction t = em.getTransaction();
		Medico medico = null;

		try {

			t.begin();
			
			Query q =  em.createQuery("select m from Medico m where m.usuario=:pUsuario");
			q.setParameter("pUsuario", usuario);
//			q.setParameter("pDataIni", dataIni);
//			q.setParameter("pDataFim", dataFim);
			medico = (Medico) q.getSingleResult();
			

			t.commit();

		} catch (Exception e) {

			e.printStackTrace();
			if (t.isActive())
				t.rollback();

		} finally {

			em.close();
		}

		return medico;

	}
	
	
}
